/*
 * Copyright(C),2024-2024, HUTT.Co.Ltd.
 * description: pidAlgo
 * author : yangxiaosheng
 * date: 2024-11-13 15:55:07
 */

#ifndef PIDALGO_H
#define PIDALGO_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <string.h>

typedef struct {
    float actVal; /* 入参 实际值 反馈值 */
    float target; /* 入参 */
    float ukInc;  /* 出参 */
    float ukPos;  /* 出参 */

    float max, min; /* 出参范围 */
    float err;
    float kd, ki, kp;

    // float P, I, D;
    float errPre;    /* E[k-1] */
    float errPrePre; /* E[k-2] */
    float integral;
} pidType;

/*------------------------------------test------------------------------------*/
void pidInit(double kp, double ki, double kd, pidType *pid);
void pidDataClr(pidType *pid);
void positionPid(pidType *pid);
void incrementalPid(pidType *pid);
void pidSetTarget(pidType *pid, float setVal);
void pidSetActVal(pidType *pid, float setVal);
void pidSetUkMaxMin(pidType *pid, int max, int min);
#ifdef __cplusplus
}
#endif

#endif /* PIDALGO_H */
